home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / include / linux / leds.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  3.8 KB  |  153 lines

  1. /*
  2.  * Driver model for leds and led triggers
  3.  *
  4.  * Copyright (C) 2005 John Lenz <lenz@cs.wisc.edu>
  5.  * Copyright (C) 2005 Richard Purdie <rpurdie@openedhand.com>
  6.  *
  7.  * This program is free software; you can redistribute it and/or modify
  8.  * it under the terms of the GNU General Public License version 2 as
  9.  * published by the Free Software Foundation.
  10.  *
  11.  */
  12. #ifndef __LINUX_LEDS_H_INCLUDED
  13. #define __LINUX_LEDS_H_INCLUDED
  14.  
  15. #include <linux/list.h>
  16. #include <linux/spinlock.h>
  17. #include <linux/rwsem.h>
  18.  
  19. struct device;
  20. /*
  21.  * LED Core
  22.  */
  23.  
  24. enum led_brightness {
  25.     LED_OFF        = 0,
  26.     LED_HALF    = 127,
  27.     LED_FULL    = 255,
  28. };
  29.  
  30. struct led_classdev {
  31.     const char        *name;
  32.     int             brightness;
  33.     int             flags;
  34.  
  35. #define LED_SUSPENDED        (1 << 0)
  36.  
  37.     /* Set LED brightness level */
  38.     /* Must not sleep, use a workqueue if needed */
  39.     void        (*brightness_set)(struct led_classdev *led_cdev,
  40.                       enum led_brightness brightness);
  41.     /* Get LED brightness level */
  42.     enum led_brightness (*brightness_get)(struct led_classdev *led_cdev);
  43.  
  44.     /* Activate hardware accelerated blink */
  45.     int        (*blink_set)(struct led_classdev *led_cdev,
  46.                      unsigned long *delay_on,
  47.                      unsigned long *delay_off);
  48.  
  49.     struct device        *dev;
  50.     struct list_head     node;            /* LED Device list */
  51.     const char        *default_trigger;    /* Trigger to use */
  52.  
  53. #ifdef CONFIG_LEDS_TRIGGERS
  54.     /* Protects the trigger data below */
  55.     struct rw_semaphore     trigger_lock;
  56.  
  57.     struct led_trigger    *trigger;
  58.     struct list_head     trig_list;
  59.     void            *trigger_data;
  60. #endif
  61. };
  62.  
  63. extern int led_classdev_register(struct device *parent,
  64.                  struct led_classdev *led_cdev);
  65. extern void led_classdev_unregister(struct led_classdev *lcd);
  66. extern void led_classdev_suspend(struct led_classdev *led_cdev);
  67. extern void led_classdev_resume(struct led_classdev *led_cdev);
  68.  
  69. /*
  70.  * LED Triggers
  71.  */
  72. #ifdef CONFIG_LEDS_TRIGGERS
  73.  
  74. #define TRIG_NAME_MAX 50
  75.  
  76. struct led_trigger {
  77.     /* Trigger Properties */
  78.     const char     *name;
  79.     void        (*activate)(struct led_classdev *led_cdev);
  80.     void        (*deactivate)(struct led_classdev *led_cdev);
  81.  
  82.     /* LEDs under control by this trigger (for simple triggers) */
  83.     rwlock_t      leddev_list_lock;
  84.     struct list_head  led_cdevs;
  85.  
  86.     /* Link to next registered trigger */
  87.     struct list_head  next_trig;
  88. };
  89.  
  90. /* Registration functions for complex triggers */
  91. extern int led_trigger_register(struct led_trigger *trigger);
  92. extern void led_trigger_unregister(struct led_trigger *trigger);
  93.  
  94. /* Registration functions for simple triggers */
  95. #define DEFINE_LED_TRIGGER(x)        static struct led_trigger *x;
  96. #define DEFINE_LED_TRIGGER_GLOBAL(x)    struct led_trigger *x;
  97. extern void led_trigger_register_simple(const char *name,
  98.                 struct led_trigger **trigger);
  99. extern void led_trigger_unregister_simple(struct led_trigger *trigger);
  100. extern void led_trigger_event(struct led_trigger *trigger,
  101.                 enum led_brightness event);
  102.  
  103. #else
  104.  
  105. /* Triggers aren't active - null macros */
  106. #define DEFINE_LED_TRIGGER(x)
  107. #define DEFINE_LED_TRIGGER_GLOBAL(x)
  108. #define led_trigger_register_simple(x, y) do {} while(0)
  109. #define led_trigger_unregister_simple(x) do {} while(0)
  110. #define led_trigger_event(x, y) do {} while(0)
  111.  
  112. #endif
  113.  
  114. /* Trigger specific functions */
  115. #ifdef CONFIG_LEDS_TRIGGER_IDE_DISK
  116. extern void ledtrig_ide_activity(void);
  117. #else
  118. #define ledtrig_ide_activity() do {} while(0)
  119. #endif
  120.  
  121. /*
  122.  * Generic LED platform data for describing LED names and default triggers.
  123.  */
  124. struct led_info {
  125.     const char    *name;
  126.     const char    *default_trigger;
  127.     int        flags;
  128. };
  129.  
  130. struct led_platform_data {
  131.     int        num_leds;
  132.     struct led_info    *leds;
  133. };
  134.  
  135. /* For the leds-gpio driver */
  136. struct gpio_led {
  137.     const char *name;
  138.     const char *default_trigger;
  139.     unsigned     gpio;
  140.     u8         active_low;
  141. };
  142.  
  143. struct gpio_led_platform_data {
  144.     int         num_leds;
  145.     struct gpio_led *leds;
  146.     int        (*gpio_blink_set)(unsigned gpio,
  147.                     unsigned long *delay_on,
  148.                     unsigned long *delay_off);
  149. };
  150.  
  151.  
  152. #endif        /* __LINUX_LEDS_H_INCLUDED */
  153.